/**
 * @author wangling
 * @date 2021-9-18
 * <p>
 * userinterfaces: 用户接口层
 *用户接口层为外部用户访问底层系统提供交互界面和数据表示。
 * 用户接口层在底层系统之上封装了一层可访问外壳，为特定类型的外部用户（人或计算机程序）访问底层系统提供访问入口，并将底层系统的状态数据以该类型客户需要的形式呈现给它们。
 *
 * 用户接口层有两个任务：
 * （1）从用户处接收命令操作，改变底层系统状态；
 * （2）从用户处接收查询操作，将底层系统状态以合适的形式呈现给用户。
 * 本例用户接口层包括如下子模块：
 *
 * 命令目录(command):    对象命名为XxxCommand，指调用方明确想让系统操作的指令，其预期是对一个系统有影响，也就是写操作。通常来讲指令需要有一个明确的返回值（如同步的操作结果，或异步的指令已经被接受）。
 * 查询目录(query):     对象命名为XxxQuery，指调用方明确想查询的东西，包括查询参数、过滤、分页等条件，其预期是对一个系统的数据完全不影响的，也就是只读操作。
 * 事件目录(event):     对象命名为XxxEvent，指一件已经发生过的既有事实，需要系统根据这个事实作出改变或者响应的，通常事件处理都会有一定的写操作。事件处理器不会有返回值。这里需要注意一下的是，Application层的Event概念和Domain层的DomainEvent是类似的概念，但不一定是同一回事，这里的Event更多是外部一种通知机制而已。
 * 返回数据对象目录(dto): 对象命名为XxxDTO，作为ApplicationService的出参
 * 控制层（Controller）: 提供restful接口，供外部系统调用
 *
 * 规范：ApplicationService的接口入参只能是一个Command、Query或Event对象，CQE对象需要能代表当前方法的语意。唯一可以的例外是根据单一ID查询的情况，可以省略掉一个Query对象的创建
 * CQE,DT0,都是Value Object，但是从语义上来看有比较大的差异，主要是从命名上区别出来。
 *
 * CQE：CQE对象是ApplicationService的输入，是有明确的”意图“的，所以这个对象必须保证其”正确性“。
 * DTO：DTO对象只是数据容器，只是为了和外部交互，所以本身不包含任何逻辑，只是贫血对象。
 * */
package com.ddd.demo.ddd.userinterfaces;
